package ar.lalosoft.adMat.domain;

import java.util.ArrayList;
import java.util.List;

import ar.lalosoft.adMat.domain.exceptions.MateriaRepetidaException;

public class Alumno extends Persona {

	private int padron;
	private ContenedorMaterias contenedor;
	private List<Integer> aprobadas;
	
	private ListadoMaterias listado;
	
	public Alumno(String nom, int padron){
		super(nom);
		this.padron = padron;
		contenedor = new ContenedorMaterias();
		aprobadas = new ArrayList<Integer>();
		
		inic();
	}

	/**
	 * Inicialmente, se cargan las materias sin correlatividades
	 */
	private void inic() {
		listado = new ListadoMaterias();
		contenedor.agregar(listado.getMateria(6103));
		contenedor.agregar(listado.getMateria(6108));
		contenedor.agregar(listado.getMateria(7540));
		contenedor.agregar(listado.getMateria(6107));
		contenedor.agregar(listado.getMateria(7112));
		
	}
	
	public int getPadron() {
		return padron;
	}

	public void setPadron(int padron) {
		this.padron = padron;
	}
	
	public void aprobada(int cod){
		aprobadas.add(cod);
		Materia mat = listado.getMateria(cod);
		try{
			
			contenedor.agregar(mat);
			
		} catch (MateriaRepetidaException e){}
	}
	
	public List<Integer> getAprobadas(){
		return aprobadas;
	}

	public void agregar(Materia materia) {
		contenedor.agregar(materia);
	}

	public boolean contiene(int i) {
		return contenedor.existe(i);
	}

	public boolean cursar(int cod) {
		
		Materia materiaCursar = listado.getMateria(cod);
		List<Integer> correlativas = materiaCursar.getCorrelativas();
		int cantidad = 0;
		
		//si no tiene correlativas, la puede cursar
		if(correlativas.isEmpty()){
			return true; 
		}
		
		//si tiene correlativas, las busca
		if(!aprobadas.isEmpty()){
			for(int i = 0; i < aprobadas.size() && cantidad <= correlativas.size(); i++){
				if(correlativas.contains(aprobadas.get(i))){
					cantidad++;
				}
			}
			return cantidad == correlativas.size();
		} else
			return false;
	}
	
	
}
